//
//  FirstViewController.swift
//  全国高等学校查询
//
//  Created by 高宇超 on 6/13/17.
//  Copyright © 2017 Yuchao. All rights reserved.
//

import UIKit
import Crashlytics

class YejiVC: UIViewController, UITableViewDelegate, UITableViewDataSource, UIPickerViewDelegate,  UIPickerViewDataSource, UISearchBarDelegate {

    @IBOutlet weak var provincePicker: UIPickerView!
    @IBOutlet weak var searchBar: UISearchBar!
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var notifyLabel: UILabel!
    @IBOutlet weak var resetBtn: UIButton!
    
    let schools = [String]([[String]](yeji.values).joined())
    var provinces = [String](yeji.keys)
    var searchRes: [String: [String]]!
    var hasSearched = false
    var searchText = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        Answers.logCustomEvent(withName: "Yeji View Loaded", customAttributes: ["time": DateFormatter().string(from: Date()), "device": UIDevice.current.modelName])

        if provinces.first! != "全国" {
            provinces.insert(provinces.remove(at: 0), at: provinces.index(of: "山西")!)
            provinces.insert(provinces.remove(at: provinces.index(of: "全国")!), at: 0)
        }
        
        provincePicker.selectRow(4, inComponent: 0, animated: false)
        
//        self.notifyLabel.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(dismissNotifiTap(sender:))))
//        self.notifyLabel.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(dismissNotifiPan(sender:))))

    }
    
    override func viewWillAppear(_ animated: Bool) {
        
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        
    }
    
    func dismissNotifiTap(sender: UITapGestureRecognizer) {
        UIView.dismissNotify(label: notifyLabel)
    }
    
    func dismissNotifiPan(sender: UITapGestureRecognizer) {
        UIView.dismissNotify(label: notifyLabel)
    }
    

    @IBAction func resetBtnPressed(_ sender: Any) {
        alertOkayAndCancel(title: "重置", msg: "确定要清空搜索结果吗？", action: { action in
            self.hasSearched = false
            self.resetBtn.isEnabled = false
            self.searchText = ""
            self.searchBar.text = self.searchText
            self.resetProvinces()
            self.provincePicker.selectRow(4, inComponent: 0, animated: true)
            self.tableView.reloadData()
            self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
        })
    }
    
    func resetProvinces() {
        provinces = [String](yeji.keys)
        provinces.insert(provinces.remove(at: 0), at: provinces.index(of: "山西")!)
        provinces.insert(provinces.remove(at: provinces.index(of: "全国")!), at: 0)
        provincePicker.reloadComponent(0)
    }
    
    func retrieveProvinceByName(name: String) -> String {
        for elem in yeji {
            if elem.value.contains(name) {
                return elem.key
            }
        }
        return ""
    }
    
    // MARK :- SearchBar
    //
    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        // search action
        let text = searchBar.text!.removeSpaces()
        let provinceIndex = provincePicker.selectedRow(inComponent: 0)
        let province = provinces[provinceIndex]
        if text.characters.count > 0 {
            searchText = text
            hasSearched = true
            retrieveResults(text: text, provinceIndex: provinceIndex)
            updateProvinces(text: text)

            if searchRes[province]!.count == 0 {
                let str = province == "全国" ? "放心填报吧~ 😉" : provinces.count == 1 ? "小鹰发现全国范围内也没有！放心去填报！😎" : "将跳至全国范围。🤔"
                alertOkay(msg: "没有在\"\(province)\"内找到名称中包含\"\(text)\"的虚假大学，\(str)", action: {
                    _ in
                    self.provincePicker.selectRow(0, inComponent: 0, animated: true)
                    self.retrieveResults(text: text, provinceIndex: 0)
                    self.tableView.reloadData()
                    self.searchBar.resignFirstResponder()
                })
            } else {
                UIView.notifyc(label: notifyLabel, text: "搜索完毕", color: .green)
                tableView.reloadData()
                tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
            }
            Answers.logCustomEvent(withName: "Yeji Searched", customAttributes: ["searchText": text, "province": province, "device": UIDevice.current.modelName])
        } else {
            Answers.logCustomEvent(withName: "Yeji Searched", customAttributes: ["searchText": text, "province": province, "device": UIDevice.current.modelName])
        }
        searchBar.resignFirstResponder()
    }
    
    func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
        resetBtn.hide(duration: 0.17)
    }
    
    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
        resetBtn.show(duration: 0.17)
    }
    
    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        searchBar.text = searchText
        searchBar.resignFirstResponder()
    }
    
    // searching
    func retrieveResults(text: String, provinceIndex: Int) {
        let province = provinces[provinceIndex]
        var res = [String: [String]]()
        res[province] = [String]()
        if province == "全国" {
            for prov in yeji {
                let key = prov.key
                if key.contains(text) {
                    res[province]!.append(contentsOf: yeji[key]!)
                } else {
                    for name in prov.value {
                        if name.contains(text) {
                            res[province]!.append(name)
                        }
                    }
                }
            }
        } else {
            for name in yeji[province]! {
                if name.contains(text) {
                    res[province]!.append(name)
                }
            }
        }
        Answers.logCustomEvent(withName: "Yeji PickerView Searched", customAttributes: ["searchText": text, "province": province, "device": UIDevice.current.modelName])
        searchRes = res
    }
    
    // update provinces
    func updateProvinces(text: String) {
        var newProvinces = [String]()
        newProvinces.append("全国")
        for prov in yeji {
            let key = prov.key
            if text.contains(key) {
                if !newProvinces.contains(key) {
                    newProvinces.append(key)
                }
            } else {
                for name in prov.value {
                    if name.contains(text) {
                        if !newProvinces.contains(key) {
                            newProvinces.append(key)
                        }
                    }
                }
            }
        }
        provinces = newProvinces
        provincePicker.reloadComponent(0)
    }
    
    // MARK :- TableView
    //
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if hasSearched {
            return searchRes.values.joined().count
        } else {
            let count = yeji[provinces[provincePicker.selectedRow(inComponent: 0)]]!.count
            return count == 0 ? 381 : count
        }
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "yejiCell") as! YejiCell
        let province = provinces[provincePicker.selectedRow(inComponent: 0)]
        let row = indexPath.row
        if hasSearched {
            if let provArr = searchRes[province] {
                cell.name.text = provArr[row]
            }
        } else {
            let yejiProv = yeji[province]!
            cell.name.text = province == "全国" ? schools[row] : row < yejiProv.count ? yejiProv[row] : ""
        }
        cell.province.alpha = 0
        cell.selectionStyle = .none
        cell.backgroundColor = UIColor.clear
        return cell
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let cell = tableView.cellForRow(at: indexPath) as? YejiCell {
            if provincePicker.selectedRow(inComponent: 0) == 0 {
                cell.province.layer.removeAllAnimations()
                cell.province.text = retrieveProvinceByName(name: cell.name.text!)
                UIView.animate(withDuration: 0.14, delay: 0, options: [.curveEaseInOut], animations: {
                    cell.province.alpha = 1
                })
            }
            UIView.animate(withDuration: 0.12, delay: 0, options: [.curveEaseInOut], animations: {
                cell.backgroundColor = UIColor(red: 0.95, green: 0.95, blue: 0.95, alpha: 1)
            })
        }
    }
    
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        if let cell = tableView.cellForRow(at: indexPath) as? YejiCell {
            if provincePicker.selectedRow(inComponent: 0) == 0 {
                cell.province.layer.removeAllAnimations()
                UIView.animate(withDuration: 0.12, delay: 0, options: [.curveEaseInOut], animations: {
                    cell.province.alpha = 0
                })
            }
            UIView.animate(withDuration: 0.12, delay: 0, options: [.curveEaseInOut], animations: {
                cell.backgroundColor = UIColor.clear
            })
        }
    }
    
    // MARK :- PickerView
    //
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return provinces.count
    }
    
    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
        let label = UILabel()
        label.font.withSize(14)
        label.textAlignment = .center
        label.minimumScaleFactor = 0.5
        label.adjustsFontSizeToFitWidth = true
        label.text = self.pickerView(pickerView, titleForRow: row, forComponent: component)
        return label
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return provinces[row]
    }
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        searchBar.resignFirstResponder()
        if hasSearched { retrieveResults(text: searchText, provinceIndex: row) }
        tableView.reloadData()
        tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
    }
    
    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        searchBar.resignFirstResponder()
    }
    
    
}



let yeji: [String: [String]] = ["全国": [], "北京": ["中国邮电大学", "中国科技管理学院", "中国师范学院", "中国信息科技学院", "中国电子信息科技学院", "中国电子科技学院", "中国科技工程学院", "中国传媒艺术学院", "中国金融管理学院", "中国国际经济管理学院", "中国工商行政管理学院", "中国科贸管理学院", "中国经济贸易大学", "中国经济贸易学院", "中国北方理工学院", "中国工业工程学院", "中国现代财经学院", "中国国际工商管理学院", "华北科技大学", "华北理工学院", "中联司法学院", "北方国际经济学院", "北方医科大学", "北京京华医科大学", "中北科技学院", "华北应用科技学院", "华侨国际商务学院", "首都科技管理学院", "首都科技信息管理学院", "北京财贸科技学院", "首都财贸管理大学", "首都经济贸易管理学院", "首都经济管理学院", "首都国际经贸学院", "首都科技学院", "首都科技职业技术学院", "首都医学院", "首都文理大学", "首都财经贸易大学", "北京经济贸易大学", "北京经济贸易学院", "北京对外贸易学院", "北京燕京华侨大学", "北京经贸联合大学", "北京国际金融学院", "北京国际经济管理学院", "北京前进大学", "北京京桥大学", "北京电子科技管理学院", "北京现代工程学院", "北京工程技术大学", "北京财经学院", "北京经济信息学院", "北京科技工程学院", "北京经贸科技学院", "北京工商学院", "北京国际医学院", "北京财经贸易学院", "北京财贸管理大学", "北京财贸管理学院", "北京建筑工业学院", "北京法商学院", "北京经济工程大学", "北京经济工程学院", "北京城市建设学院", "北京商贸管理学院", "北京商贸管理大学", "北京贸易管理大学", "京师科技学院", "北京科技学院", "北京中山学院", "北京京城学院", "北京财经大学", "北京城建大学", "北京财经政法大学", "北京现代商务学院", "北京工程经济学院", "北京实验大学", "北京商贸职工大学", "北京工学院", "华北经济贸易学院", "北京东方工商大学", "北方联合大学", "北京经济管理学院", "中国信息科技大学", "中国信息工程学院", "首都财经管理学院", "北京财经管理大学", "北京财经管理学院", "北京财商学院", "神州大学", "北京中加工商学院", "北京京文国际学院", "北京商贸大学", "北方交通工程学院", "华北工业大学", "北京英迪经贸学院", "北京高级财务管理专修学院", "常德经贸学院", "对外经贸管理学院", "北京理工科技大学", "北京建筑职工大学", "北京建筑职业大学", "北京商贸科技大学", "北京财贸学院", "北京工业建筑学院", "北京行政管理学院", "北京华理商务学院", "北京建筑科技学院", "北京科技建设学院", "北京金融管理学院", "北京经贸工程学院", "北京科技经济管理学院", "北京科技师范学院", "北京联合技术学院", "北京民族师范学院", "北京商贸工程学院", "北京外事学院", "北京现代管理学院", "北京现代经管学院", "北京现代信息学院", "北京信息科技学院", "北京工程管理学院", "首都师范学院", "北方国际经贸学院", "华北工程管理学院", "中国工贸管理学院", "中国建设工程学院", "中华科技外事学院", "北京医科大学", "北京经济学院", "北京信息工程大学", "北京工商管理大学", "北京现代经贸大学", "北京科技师范大学", "北京同济医科大学", "北京京华医科大学", "华北国医学院", "北京行政学院", "北京财经金融学院", "北京国际信息管理学院", "北京工业科技学院", "北京国际贸易学院", "北京机电工程学院", "北京建筑工程学院", "北京科技工业学院", "北京科技管理学院", "北京旅游商贸学院", "北京软件工程学院", "北京现代工商管理学院", "北京信息经济学院"], "河南": ["中原金融学院", "河南华夏医学院", "河南科技师范学院", "郑州黄河学院", "郑州长征医学院", "河南城市建设学院"], "江苏": ["南京科技学院", "南京商学院", "南京工商大学", "华东农林科技大学", "南京科技管理学院", "南京金陵科技管理学院", "江苏信息工程学院", "江苏都市建设学院", "江苏理工职业学院", "南京中山大学", "江苏大光科技大学", "江苏华夏学院", "南京工商学院", "南京东南文理学院", "江苏经济贸易大学", "江苏科技信息学院", "苏州工商学院/江苏工商学院"], "广东": ["广州理工学院", "广东电子信息技术学院", "广东科技管理大学", "广东经济管理学院", "广东建工大学", "广东科技贸易学院", "广东商贸管理学院", "广州经济管理学院", "广东电子商务学院", "广东科技工业学院", "广东现代经济管理学院", "广州信息科技学院"], "湖北": ["武汉科技工程学院", "武汉工商管理大学", "湖北工商管理学院", "华中工商学院", "中原工商管理学院", "武汉建筑职工大学", "湖北工商大学", "湖北信息工程大学", "武汉东湖大学", "武汉工程技术大学", "武汉时代自修大学", "武汉信息科技学院", "武汉职工财经学院", "湖北工程管理学院"], "山西": ["山西理工学院", "华北经贸管理学院", "山西经济技术学院", "山西信息工程学院", "山西远东外国语学院", "山西自修大学", "山西建筑工程职业技术学院", "山西金融管理学院", "山西现代经贸学院"], "陕西": ["西安电子信息学院", "西安理工学院", "西安工商学院", "西安科技师范大学", "西安信息技术学院", "西安工商管理学院", "西安工业科技技术学院", "西安工业科技学院", "陝西国防工业技术学院", "陕西瀚林医科学院", "西安工业工程学院", "陝西工贸职业学院", "西安科技职业学院", "西安经济技术学院", "西安机电工程学院", "陝西科技管理学院"], "浙江": ["杭州工商管理大学", "杭州理工学院", "杭州理工大学", "杭州建设管理大学", "对外经济贸易管理学院", "浙江国际商务学院", "浙江邮电职工大学", "杭州经济贸易大学", "浙江信息技术学院"], "重庆": ["重庆城市学院", "重庆机电科技学院", "重庆万州高科学院"], "湖南": ["湖南屈原大学", "株洲航空旅游学院", "湖南经济管理大学", "湖南湘林科技大学", "中南建筑工业学院", "湖南工贸学院"], "广西": ["西江联合大学(仿冒）", "广西北海外贸学院", "南宁海桂旅游学院"], "贵州": ["贵州现代商贸学院", "贵阳名达职业技术学院"], "吉林": ["长舂工业管理学院", "吉林高创科技大学", "吉林理工科技学院", "吉林对外经贸职业学院"], "辽宁": ["沈阳工程管理学院", "沈阳信息管理学院", "辽宁轻工职工大学", "沈阳盛京大学", "辽宁职业技术学院"], "江西": ["江西科技工程大学", "江西科技管理学院", "江西经贸管理学院", "江西赣南学院", "江西现代科技学院", "景德镇工艺美术学院", "赣州电子科技信息学院"], "山东": ["青岛博洋商务学院", "山东经济技术学院", "山东沂蒙学院", "山东东岳学院", "淄博理工学院", "山东邮电大学", "山东经济贸易大学", "山东科技工程学院", "青岛远洋大学", "山东文理学院", "山东建设学院", "青岛现代经贸学院", "山东经济信息学院", "山东城市学院", "山东华信大学", "山东科技管理大学", "山东科技师范学院", "山东经济管理大学", "青岛华侨理工学院", "青岛精诚医学院", "山东工业工程学院", "山东管理技术学院", "山东建工科技学院", "山东经济工程学院", "山东信息管理学院"], "四川": ["四川财经管理学院", "四川中山学院", "四川华商学院", "西南经济贸易大学", "四川经济贸易大学", "四川联合大学(仿冒）", "四川江州医学院", "成都科技学院", "西南经济管理大学", "四川信息工程学院", "四川软件工程学院", "四川经济技术学院", "四川经济管理学院（历史，冒名）", "四川国际贸易学院", "四川电力工程学院"], "安徽": ["新民大学", "安徽城市建设学院", "安徽城建大学", "华北建筑工业学院", "安徽南合科技大学"], "河北": ["北方经济管理学院", "华北师范学院", "石家庄电子科技学院", "河北东亚大学", "石家庄工程管理学院", "华北建筑工程学院", "河北商贸学院", "河北人文科技学院", "河北工程科技学院", "河北经济技术学院", "河北电子工程职业学院", "河北信息工程学院", "河北经济信息学院", "河北师范高等专科学校", "河北科技工程大学", "河北科技工程学院"], "青海": ["青海扬帆科技大学"], "黑龙江": ["黑龙江民盟大学", "中原工业大学", "牡丹江外国语学院", "哈尔滨商务经贸学院", "哈尔滨远方国际学院"], "甘肃": ["兰州对外经济贸易学院"], "上海": ["上海经济贸易大学", "上海工业科技学院", "上海工业科技大学", "上海财经贸易学院", "上海金融管理学院", "上海东方科技学院", "上海工程管理学院", "上海华夏学院", "上海建筑工业学院", "上海商贸管理大学", "华东财经学院", "上海同济医科大学", "上海华文外国语学院", "上海城市建设大学", "上海工商学院", "长江科技学院", "上海国际管理大学", "上海建设学院", "上海财经管理学院", "上海临港科技学院", "上海工业管理学院", "上海新华机电学院", "上海建筑工程学院", "上海经济技术学院", "上海信息大学", "上海经济管理大学", "上海工程科技学院", "上海城市学院", "上海财经学院"], "宁夏": ["宁夏五洲科技大学"], "福建": ["厦门师范学院", "福建海蛱经贸技术学院", "福建经济贸易大学", "福建科技学院", "福建省轻工业学院"], "天津": ["中国民航学院", "天津文理大学", "天津联合大学", "中外经贸管理学院", "天津经济贸易大学", "天津建筑工程大学", "天津新华学院", "天津商贸学院", "天津财贸管理学院", "天津南城管理学院", "天津市经济管理干部学院", "天津建筑科技大学", "天津工商学院", "天津经济管理学院"]]

